package main.java.com.pzhu.algorithm;

import java.util.Arrays;

/**
 * 383. 赎金信
 * 给你两个字符串：ransomNote 和 magazine ，判断 ransomNote 能不能由 magazine 里面的字符构成。
 * <p>
 * 如果可以，返回 true ；否则返回 false 。
 * <p>
 * magazine 中的每个字符只能在 ransomNote 中使用一次
 *
 * @author rediaz
 * @date 2024-06-11
 */

public class _008canConstruct {
    public static boolean canConstruct(String ransomNote, String magazine) {
        int[] charCount = new int[26]; // 用于统计magazine中字符出现的次数

        // 统计magazine中字符的频次
        for (char c : magazine.toCharArray()) {
            charCount[c - 'a']++;
        }

        // 检查ransomNote中每个字符是否在magazine中出现足够次数
        for (char c : ransomNote.toCharArray()) {
            if (charCount[c - 'a'] == 0) {
                return false; // 如果字符在magazine中不足，返回false
            }
            charCount[c - 'a']--; // 使用一个字符，减少计数
        }

        return true; // 所有字符都匹配，返回true
    }

    public static void main(String[] args) {
        System.out.println(canConstruct("a", "b")); // false
        System.out.println(canConstruct("aa", "ab")); // false
        System.out.println(canConstruct("aa", "aab")); // true
        System.out.println(canConstruct("aac", "aab")); // false
    }
}
